#ifndef CLUSNET_NET_CALLBACKS_H
#define CLUSNET_NET_CALLBACKS_H

#include <memory>

namespace clusnet
{
namespace net
{

class TcpConnection;
class TcpDataPacket;
class TcpClient;
using TcpConnectionPtr = std::shared_ptr<TcpConnection>;
using TcpClientPtr = std::shared_ptr<TcpClient>;
using TcpUniqDataPacketPtr = std::unique_ptr<TcpDataPacket>;
using TcpDataPacketPtr = std::shared_ptr<TcpDataPacket>;
using TcpNewConnectionCallback = std::function<void(TcpConnectionPtr&)>;
using TcpCloseCallback = std::function<void(TcpConnectionPtr&)>;
using TcpWriteCompleteCallback = std::function<void(TcpConnectionPtr&, TcpDataPacketPtr const&)>;
using TcpMessageCallback = std::function<void(TcpConnectionPtr&, TcpUniqDataPacketPtr&&)>;

class UdpDataPacket;
class UdpSession;
class UdpClient;
using UdpClientPtr = std::shared_ptr<UdpClient>;
using UdpSessionPtr = std::shared_ptr<UdpSession>;
using UdpDataPacketPtr = std::shared_ptr<UdpDataPacket>;
using UdpUniqDataPacketPtr = std::unique_ptr<UdpDataPacket>;
using UdpWriteCompleteCallback = std::function<void(UdpSessionPtr&, UdpDataPacketPtr const&)>;
using UdpMessageCallback = std::function<void(UdpSessionPtr&, UdpUniqDataPacketPtr&&)>;
}
}

#endif
